package com.study.tools;

import java.lang.reflect.InvocationTargetException;
import java.util.Date;
import java.util.Enumeration;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.ConvertUtils;

public class MyTools {
	/**
	 * @小可爱   FORM表单数据转换为实体类数据
	 * @return   转换之后的结果
	 */
	public static <T> T formToBean(HttpServletRequest request,Class<T> clazz) {
		T t = null;
		try {
			t=clazz.newInstance();//new关键字能调用任何构造方法。newInstance只能调用无参构造方法
		} catch (Exception e) {
			
			e.printStackTrace();
		}
		if(request!=null) {
			//获取request中提交所有的表单空间的name属性的值
			Enumeration<String> paramName=request.getParameterNames();// 接口是Iterator迭代器的“古老版本
			if(paramName!=null) {
				//ConvertUtils.register(new DateTimeConverte(),Date.class);
				//遍历每一个元素
				try {
				while(paramName.hasMoreElements()) {
					//去出当前遍历元素的的对象：当前表单的name的属性值
				String strName=paramName.nextElement();
				///从request获取当前form表单的name对应的value值
				String strVal=request.getParameter(strName);
				//使用反射将表单的value值设置到与之对应的实体类属性中，
				
					BeanUtils.setProperty(t, strName, strVal);
				}
				} catch (Exception e) {
					// 将表单映射到实体类中的异常
					System.out.println("将表单映射到实体类中的异常:"+e.getMessage());
					e.printStackTrace();
				} 
				
			
		}
			
  }
		 return t;		
}
	public static <T> T getInstance(Class<T> clazz) {
		// 返回值
		T t = null;
		try {
			// 反射获取该Class的一个实例对象
			t = clazz.newInstance();
		} catch (Exception e) {
			// 获取实例对象异常
			System.out.println("获取实例对象异常:" + e.getMessage());
			e.printStackTrace();
		}
		return t;
	}
}
